package com.fourth.service.impl;

import com.fourth.entity.AccountStatement;
import com.fourth.mapper.AccountStatementMapper;
import com.fourth.service.IAccountStatementService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 邓建波
 * @since 2022-08-04
 */
@Service
public class AccountStatementServiceImpl extends ServiceImpl<AccountStatementMapper, AccountStatement> implements IAccountStatementService {

    /**
     * 插入流水记录
     * @param userId 用户id，用于生成唯一订单号
     * @param tradeType 交易类型，1为充值，2为提现，3为转账
     * @param tradeMoney 交易金额
     * @param tradeState 交易状态
     * @param payAccount 付款人账户(填用户手机号 或 银行卡号)
     * @param payName 付款人姓名
     * @param collAccount 收款人账户(填用户手机号 或 银行卡号)
     * @param collName 收款人姓名
     * @param remarks 备注
     * @return boolean 返回插入情况
     * @author 许桂源
     */
    @Override
    public Boolean insertRecord(Long userId, String tradeType, BigDecimal tradeMoney, Integer tradeState, String payAccount, String payName, String collAccount, String collName, String remarks) {
        AccountStatement ac = new AccountStatement();
        ac.setTradeType(tradeType);
        ac.setTradeMoney(tradeMoney);
        ac.setTradeState(tradeState);
        ac.setPayAccount(payAccount);
        ac.setPayName(payName);
        ac.setCollAccount(collAccount);
        ac.setCollName(collName);
        ac.setRemarks(remarks);

        // 根据时间戳 + 用户id
        //一个13位的时间戳
        long now = System.currentTimeMillis();
        String id = userId + "";
        // 如果用户id长度为1，那么生成4位的数字拼接 ，如果为2，生成3位数拼接 ， 如果位3，生成2位数来拼接
        String randomNum = getRandomNum(5 - id.length());
        // 订单ID
        String billId =randomNum+now+userId;
        ac.setBillId(billId);
        return save(ac);
    }

    private String getRandomNum(int n){
        StringBuilder sb = new StringBuilder();
        for(int i = 0 ; i < n ; i ++) {
            sb.append((int)(Math.random()*(10)));
        }
        return sb.toString();
    }
}
